const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin')


// 当以命令行形式运行webpack 或 webpack-dev-server的时候，工具会发现，我们并没有提供要打包的文件 入口 和 出口文件 ，此时，
// 它会检查项目根目录中的配置文件，并读取这个文件，就拿到了导出的这个配置对象，然后根据这个对象，进行打包构建。
module.exports = {
    entry: path.join(__dirname, './src/main.js'),// 入口文件
    output: {// 指定输出选项
        path: path.join(__dirname, './dist'),// 输出路径
        filename: 'bundle.js'
    },
    mode: 'development',// development为开发者环境，production为生产环境变量 ，还有一个为none
    devtool: 'source-map',// 代码调试
    devServer: {
        host: '192.168.1.219',
        port: 3000,
        contentBase: './dist'
    },
    plugins: [
        new htmlWebpackPlugin({
            template: path.join(__dirname, './src/index.html'),
            filename: 'index.html'
        }),
        new VueLoaderPlugin()// Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用
    ],
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            {
                test: /\.(png|jpe?g|gif|svg)$/,
                loader: 'url-loader',
                options: {
                    limit: 1024,
                    esModule: false
                }
            },
            {
                test: /\.(ttf|eot|svg|woff|woff2)$/,
                use: 'url-loader'
            },
            {
                test: /\.js$/,
                use: 'babel-loader',
                exclude: /node_modules/
            },
            {
                test: /\.vue$/,
                use: 'vue-loader'
            }
        ]
    },
    resolve: {
        extensions: ['.js', '.vue', '.json'],// 导入文件省略后缀名
        alias: {// 修改vue被导入时候的包的路径
            // 'vue$': 'vue/dist/vue.js'
        }
    },
    performance: {
        hints: "warning", // 枚举
        maxAssetSize: 30000000, // 整数类型（以字节为单位）
        maxEntrypointSize: 50000000, // 整数类型（以字节为单位）
        assetFilter: function (assetFilename) {
            // 提供资源文件名的断言函数
            return assetFilename.endsWith(".css") || assetFilename.endsWith(".js");
        }
    }
}
